import { remark } from 'remark';
import html from 'remark-html';
import { readFileSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
import matter from 'gray-matter';

/**
 * 根据文章的 slug 获取单篇文章的详细内容
 * @param {string} slug - 文章的唯一标识符
 * @returns {Promise<{slug: string, content: string, [key: string]: any}>} 
 */
export async function getPostBySlug(slug) {
  // 构建文章的完整路径
  const postsDirectory = join(process.cwd(), 'src/posts');
  const fullPath = join(postsDirectory, `${slug}.md`);
  
  // 读取 Markdown 文件内容
  const fileContents = readFileSync(fullPath, 'utf8');

  // 使用 gray-matter 解析 markdown 文件的元数据（文件头部的 YAML 内容）
  // data 包含 YAML 中的数据（如 title, date 等）
  // content 包含实际的 markdown 内容
  const { data, content } = matter(fileContents);

  // 使用 remark 将 markdown 转换为 HTML
  // 1. remark() 创建一个新的处理器
  // 2. .use(html) 使用 remark-html 插件
  // 3. .process(content) 处理 markdown 内容
  const processedContent = await remark()
    .use(html)
    .process(content);
  const contentHtml = processedContent.toString();

  // 返回处理后的文章数据
  return {
    slug,                // 文章标识符
    content: contentHtml, // 转换后的 HTML 内容
    ...data             // 展开文章元数据（title, date 等）
  };
}

/**
 * 获取所有博客文章的列表
 * @returns {Array<{slug: string, [key: string]: any}>} 
 */
export function getAllPosts() {
  // 获取 posts 目录的完整路径
  const postsDirectory = join(process.cwd(), 'src/posts');
  
  // 读取目录中的所有文件
  const filenames = readdirSync(postsDirectory);
  
  // 处理每个 markdown 文件
  const posts = filenames.map(filename => {
    // 从文件名中提取 slug（移除 .md 扩展名）
    const slug = filename.replace(/\.md$/, '');
    
    // 读取文件内容
    const fullPath = join(postsDirectory, filename);
    const fileContents = readFileSync(fullPath, 'utf8');
    
    // 只解析文件的元数据部分
    const { data } = matter(fileContents);

    // 返回文章的基本信息
    return {
      slug,  // 文章标识符
      ...data // 展开文章元数据（title, date 等）
    };
  });

  return posts;
} 